/*
 ============================================================================
 文件名    : Line.h
 描述     : CLine基类声明.
 ============================================================================
 */

#ifndef LINE_H_
#define LINE_H_

// 引用
#include <e32base.h>
#include "BasicGeometry.h"

// 前向声明小球类
class CBall;

//类声明
/*
 * CLine 类
 * 声明了线类，提供线的属性和接口
 */
class CLine : public CBase
	{
	
private:
    // 两点式,起点和终点
	TRealPoint iStart;
	TRealPoint iEnd;
	// Ax+By+c = 0;
	TReal iA;
	TReal iB;
	TReal iC;
	
public:
	static CLine* NewL( TRealPoint aStart, TRealPoint aEnd );
	TPoint GetStart();
	void SetStart( TPoint aStart );
	TPoint GetEnd();
	void SetEnd( TPoint aEnd );
	// 返回直线方向
	TRealVector GetDir();
	// 返回直线上点的纵坐标
	TInt GetY( TInt aX );
	// 判断竖直
	TBool IsVertical();
	// 判断水平
	TBool IsHorizonal();
	// 碰撞检测
	virtual TBool Hit( CBall* aBall );
	// 返回点到直线距离
	virtual TReal Distance( TPoint aPoint );
	// 返回点到直线垂线的垂足
	virtual TPoint GetPerFoot( TPoint aPoint );
private:
	CLine( TRealPoint aPoint1, TRealPoint aPoint2 );
	void ConstructL();
	void Initialize();
	};

#endif /* LINE_H_ */
